// ES6 数组的新增方法


//     ...扩展运算符

// let arr1 = [1, 1, 1, 1];
// let arr2 = [2, 2, 2, 2, 2];
// let arr = [...arr1, ...arr2];
// console.log(arr) //[1, 1, 1, 1, 2, 2, 2, 2, 2]

// let [x, y, ...test, z] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
// console.log(x, y, test, z) //报错 Rest element must be last element


// Array.from() 功能： 把类数组（ 只要有length） 转换为真正的数组
// 参数有两个， 第一个类数组， 第二个回调函数， 回调函数的参数为每一项

// let lis = document.querySelectorAll('li');
// console.log(lis) //是类数组 NodeList(9) [li, li, li, li, li, li, li, li, li]0: li1: li2: li3: li4: li5: li6: li7: li8: li length: 9__proto__: NodeList
// console.log(Array.from(lis)) //数组  [li, li, li, li, li, li, li, li, li]

// let lis = Array.from(document.querySelectorAll('li'), function(item) {
//     return item.innerHTML
// })
// console.log(lis) //["1", "2", "3", "4", "5", "6", "7", "8", "9"]

// let arr = {
//     0: 1,
//     1: 2,
//     2: 3
// }
// console.log(Array.from(arr)) //[]

// let arr = {
//     0: 1,
//     1: 2,
//     2: 3,
//     length: 3
// }
// console.log(Array.from(arr)) //[ 1, 2, 3 ]

// Array.isArray 判断是否是数组 是返回boolean
// typeof array 判定是否是数组 返回的是类型

// let arr = [1, 3, 5, 2];
// console.log(Array.isArray(arr)) //true

// let arr = {
//     0: 1,
//     1: 2,
//     2: 3
// }
// console.log(Array.isArray(arr)) //false  是类数组，不是数组 

// let arr = {
//     0: 1,
//     1: 2,
//     2: 3,
//     length: 3
// }
// console.log(Array.isArray(arr)) //false  是类数组，不是数组 

// Array.of(一组数据)
// 功能: 把一组数据转成数组

// let arr = Array.of(1, 2, 4, 6, 3);
// console.log(arr) //[ 1, 2, 4, 6, 3 ]

// let arr = Array.of('q', 'e', 1, 4, 6);
// console.log(arr)

// console.log(Array.of(10)) //[10]
// console.log(Array(10)) //[empty × 10]

// Array.prototype.copyWithin
// 功能： 替换数组 修改原数组
// 参数
// 1. 开始替换的位置
// 2. 从该位置开始读取数据
// 3. 从该位置结束读取数据
// 参数为一个的时候， 是指从数组中的开头截取（ 参数的个数） 个， 一直循环， 返回新数组， 新数组和原数组的个数一样
// 参数为两个， 截取数组个数， 写入新数组一遍， 不够补上的项是第二个参数为下标的， 后面的

// let arr = [1, 2, 3, 5, 6, 7];
// arr.copyWithin(0)
// console.log(arr) //[ 1, 2, 3, 5, 6, 7 ]

// let arr = [1, 2, 3, 5, 6, 7];
// arr.copyWithin(4)
// console.log(arr) //[ 1, 2, 3, 5, 1, 2 ]

// let arr = [1, 2, 3, 5, 6, 7];
// arr.copyWithin(4, 1)
// console.log(arr) //[ 1, 2, 3, 5, 2, 3 ]

// let arr = [1, 2, 3, 5, 6, 7];
// arr.copyWithin(4, 3)
// console.log(arr) //[ 1, 2, 3, 5, 5, 6 ]

// let arr = [1, 2, 3, 5, 6, 7];
// arr.copyWithin(2, 2, 3)
// console.log(arr) //[ 1, 2, 3, 5, 6,7 ]

// Array.prototype.find(function(item, index, arry) {})
// 功能： 查找数组第一个匹配项
// 查到， 返回查到的项， 查不到， 返回undefined

// let arr = ['1', '2', '3', '50'];
// arr.find(function(item, index, array) {
//         console.log(item)
//         console.log(index)
//     }) //1 0 2 1 3 2 50 3

// let arr = ['1', '2', '3', '50'];
// console.log(arr.find('1')); //报错，1 is not a function
// console.log(arr.find(1)); //报错，1 is not a function

// let arr = ['1', '2', '3', '50'];
// console.log(arr.find(function(item) {
//         return item === '1'
//     })) //1

// let arr = ['1', '2', '3', '50'];
// console.log(arr.find(function(item) {
//         return item === '8'
//     })) //undefined

// Array.prototype.findIndex(function(item, index, array) {})
// 功能： 查找数组第一个匹配项的下标
// 查到， 返回项的下标， 查不到， 返回 - 1

// let arr = ['1', '2', '3', '50'];
// arr.findIndex(function(item, index, array) {
//         console.log(item)
//         console.log(index)
//     }) //1 0 2 1 3 2 50 3

// let arr = ['1', '2', '3', '50'];
// console.log(arr.findIndex('1')); //报错，1 is not a function
// console.log(arr.findIndex(1)); //报错，1 is not a function

// let arr = ['1', '2', '3', '50'];
// console.log(arr.findIndex(function(item, index) {
//         return item === '1'
//     })) //0

// let arr = ['1', '2', '3', '50'];
// console.log(arr.findIndex(function(item) {
//         return item === '8'
//     })) //-1

// Array.prototype.fill(填充的内容，？ startIndex, ? endIndex) 会改变原数组， 返回值为改变后的数组
// 功能： 填充数组
// 填充的内容可以是任何类型， 对象， 数组。。。

// let arr = [1, 3, 4, 5, 6, 7];
// console.log(arr.fill('a')) //[ 'a', 'a', 'a', 'a', 'a', 'a' ]

// let arr = [1, 3, 4, 5, 6, 7];
// console.log(arr.fill('a', 3)) //[ 1, 3, 4, 'a', 'a', 'a' ]

// let arr = [1, 3, 4, 5, 6, 7];
// console.log(arr.fill('a', 2, 4)) //[ 1, 3, 'a', 'a', 6, 7 ]

// Array.prototype.includes(检验的元素)
// 功能： 查找数组是否包含指定元素
// 返回值是布尔值
// indexOf()
// NaN的操作 indexOf 为 - 1
// includes 为true

// let arr = [1, 2, 4, 5, 6];
// console.log(arr.includes('2')) //false
// console.log(arr.includes(2)) //true

// let arr = [1, 2, 3, NaN];
// console.log(arr.includes(NaN)) //true
// console.log(arr.indexOf(NaN)) //-1

// Array.prototype.flat(要拉平的级数) 就是基层， 参数为数字
// 功能： 把潜逃的数组拉平
// node 不支持 flat， 在终端打开会报错

// let arr = [1, 2, 3, 4, [12, 3, 4]]
// console.log(arr.flat()) //[1, 2, 3, 4, 12, 3, 4]

// let arr = [1, 2, 3, 4, [12, [1, 2], 3, 4]]
// console.log(arr.flat()) //[1, 2, 3, 4, 12, Array(2), 3, 4]
// console.log(arr.flat(2)) //[1, 2, 3, 4, 12, 1, 2, 3, 4]




// 便利遍历器对象 遍历器对象（ Iterator）
// 遍历遍历器对象的方法
// for...of...
// 遍历器对象的一些配置keys values entries

// let arr = [1, 2, 3];
// console.log(arr.keys()) // 输出遍历器对象的下标
// console.log(arr.values()) //输出的是遍历器对象的值
// console.log(arr.entries()) //输出的是遍历器对象的值，是个数组

// let arr = [1, 2, 3];
// for (let key in arr.keys()) {
//     console.log("---");
//     console.log(key);
// } //用(for  in) 不可以遍历遍历器对象

// let arr = [1, 2, 3];
// for (let key of arr.keys()) {
//     console.log(key)
// } //输出的是下标

// let arr = [1, 2, 3];
// for (let key of arr.values()) {
//     console.log(key)
// } //输出的是每个的值

// let arr = [1, 2, 3];
// for (let key of arr.entries()) {
//     console.log(key)
// } //输出的是对象，每个的下标和值

// let arr = ['q', 'w', 'e', 's'];
// for (let key of arr.entries()) {
//     console.log(key)
// }

// let arr = ['q', 'w', 'e', 's'];
// let val = arr.keys()
// console.log(val.next()) //{value: 0, done: false}

// let arr = ['q', 'w', 'e', 's'];
// let val = arr.values();
// console.log(val.next()) //{value: "q", done: false}
// console.log(val.next()) //{value: "w", done: false}
// console.log(val.next()) //{value: "e", done: false}
// console.log(val.next()) //{value: "s", done: false}
// console.log(val.next()) //{value: undefined, done: true}

// let arr = ['q', 'w', 'e', 's'];
// let val = arr.entries();
// console.log(val.next()) //index.js:289 {value: Array(2), done: false}
// console.log(val.next()) //index.js:289 {value: Array(2), done: false}
// console.log(val.next()) //index.js:289 {value: Array(2), done: false}
// console.log(val.next()) //index.js:289 {value: Array(2), done: false}
// console.log(val.next()) //index.js:292 {value: undefined, done: true}